import {
  createElement,
  createTextVnode
} from './vnode';

//管理所有的render函数
//传入Vue 是所有render函数在该构造函数原型上进行扩展
function renderMixin(Vue) {
  //针对vnode的render函数
  Vue.prototype._render = function () {
    const vm = this,
      //拿到AST形成后转出的render函数(字符串代码)
      render = vm.$options.render,
      //执行后变成vnode节点
      vnode = render.call(vm);

    // console.log(vnode.el);
    return vnode;

    /**
     * console.log(vnode);
     * {
     *   tag: "div",
     *   props: {id: 'app', style: {…}},
     *   children: (3) [{…}, {…}, {…}],
     *   text: undefined
     * }
     */
  }

  //负责处理创建元素节点
  Vue.prototype._c = function () {
    // console.log(...arguments);
    return createElement(...arguments);
  }

  //负责处理{{}}里面的变量字符
  Vue.prototype._s = function (value) {
    if (value === null) return;

    return typeof value === 'object' ? JSON.stringify(value) : value;
  }

  //负责处理创建文本节点
  Vue.prototype._v = function (text) {
    return createTextVnode(text);
  }

}

export {
  renderMixin
}